package com.genius.util.Utils;

import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Collections;

import static com.genius.util.ConstPool.RedisConstPool.LOGIN_PHONE_KEY;
import static com.genius.util.Lua.codeVerifyLua.VERIFY_CODE_SCRIPT;

/**
 *  验证工具，用于手机号，邮箱号，验证码等等信息验证
 */
public class VerifyTools {
    /**
     * 检测手机验证码是否正确，如果正确则返回true，不正确则返回 false，正确或者不正确都会删除验证码，实现获取删除原子性
     * @param phone
     * @param code
     * @return
     */
    public static boolean verifyPhoneCode(String phone, String code, StringRedisTemplate stringRedisTemplate) {
        String key = LOGIN_PHONE_KEY+phone;
        String cacheCode = null;
        cacheCode = stringRedisTemplate.opsForValue().getAndDelete(key);
        if(cacheCode == null || !cacheCode.equals(code)) {
            return false;
        }
        return true;
    }

    /**
     * 通过lua脚本实现原子性，正确则删除key并返回true，不正确则返回 false
     * @param phone
     * @param code
     * @return
     */
    public static boolean verifyPhoneCodeByLua(String phone,String code, StringRedisTemplate stringRedisTemplate){
        boolean result = stringRedisTemplate.execute(
                VERIFY_CODE_SCRIPT, Collections.emptyList(), code, phone
        );
        return Boolean.TRUE == result;
    }
}
